home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / cgazv5n5.arc / LIST5.C < prev    next >
C/C++ Source or Header  |  1991-09-23  |  1KB  |  50 lines

  1. /*---------------------------------------- Listing 5 ------
  2.  * Demonstration of calling one handler from another.
  3.  * See Listing 1 for copyright terms.
  4.  *-------------------------------------------------------*/
  5. #include <stdio.h>
  6. #include <signal.h>
  7.  
  8. void FpeHandler ( int Signal, int SubCode );
  9. void main ( void );
  10.  
  11. void FpeHandler ( int Signal, int SubCode )
  12. {
  13.     /*---------------------------------------------------------
  14.      * Microsoft C work around to keep handler from recursive 
  15.      * re-entry. After enjoying the crash (MSC only) , 
  16.      * turn on the following line: 
  17.      *-------------------------------------------------------*/
  18.  
  19. #ifdef WATCH_MSC_CRASH
  20.     signal(SIGFPE, SIG_IGN);
  21. #endif
  22.     _fpreset();
  23.     printf( "Signal %d, SubCode %d was raised\n", 
  24.              Signal, SubCode );
  25.     raise ( SIGFPE );
  26.  
  27.     /*---------------------------------------------------------
  28.      * For demonstration purposes, SIGFPE was explicitly raised 
  29.      * within the handler. Therefore, the following line is 
  30.      * NEVER reached  
  31.      *-------------------------------------------------------*/
  32.  
  33. #ifdef WATCH_MSC_CRASH
  34.     signal(SIGFPE, FpeHandler);
  35. #endif
  36. }
  37.  
  38. void main ( void )
  39. {
  40.     void (*OldHandler) ( int Signal );
  41.     float Bill, Gates;
  42.  
  43.     Bill = Gates;
  44.  
  45.     OldHandler = signal ( SIGFPE, FpeHandler );
  46.     if ( OldHandler == SIG_ERR )
  47.         printf ( "signal failed\n" );
  48.  
  49.     raise ( SIGFPE );
  50. }